﻿//using MT.Common.Helpers;
//using Newtonsoft.Json;
//using System;
//using System.Collections.Generic;
//using System.Net;
//using System.Net.Http;
//using System.Security.Principal;

//namespace MT.Common.Log
//{
//    public class BaseApiException : HttpResponseException
//    {
//        public HttpStatusCode Code { get; private set; }
//        public string Description { get; private set; }

//        public Dictionary<HttpResponseHeader, string> AdditionalHeaders { get; private set; }

//        public BaseApiException(HttpStatusCode code, string description, IPrincipal principal, ErrorLocation location)
//           : base(new HttpResponseMessage()
//           {
//               StatusCode = code,
//               ReasonPhrase = description
//           })
//        {
//            this.Code = code;
//            this.Description = description;
//            this.AdditionalHeaders = new Dictionary<HttpResponseHeader, string>();
//            if (description.Trim() == "Unknown Company")
//            {
//                //this.Response.Content = new StringContent(JsonConvert.SerializeObject(new ErrorMsg
//                //{
//                //    Code =  ErrorCode.CompanyNotExist, Msg= ErrorCode.CompanyNotExist.GetEnumDesc()
//                //}));
//            }
//            else
//            {
//                //this.Response.Content = new StringContent(JsonConvert.SerializeObject(new ErrorMsg
//                //{
//                //    Code =  ErrorCode.InvalidParameter, Msg= ErrorCode.InvalidParameter.GetEnumDesc()
//                //}));
//            }

//            switch (location)
//            {
//                case ErrorLocation.WebApi:
//                 //   ExceptionLogger.LogWebServiceException(new Exception(description, this), principal);
//                    break;
//                case ErrorLocation.Storage:
//                   // ExceptionLogger.LogStorageException(new Exception(description, this), principal);
//                    break;
//                case ErrorLocation.Client:
//                   // ExceptionLogger.LogClientError(new Exception(description, this), (principal as ICustomPrincipal), null);
//                    break;
//                default:
//                  //  ExceptionLogger.LogException(new Exception(description, this));
//                    break;
//            }


//        }

//        //public BaseApiException(HttpStatusCode code, ErrorMsg error, IPrincipal principal, ErrorLocation location)
//        //    : base(new HttpResponseMessage()
//        //    {
//        //        StatusCode = code,
//        //    })
//        //{
//        //    this.Code = code;
//        //    this.AdditionalHeaders = new Dictionary<HttpResponseHeader, string>();
//        //    this.Response.Content = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(error));


//        //    switch (location)
//        //    {
//        //        case ErrorLocation.WebApi:
//        //          //  ExceptionLogger.LogWebServiceException(new Exception(error.Msg, this), principal);
//        //            break;
//        //        case ErrorLocation.Storage:
//        //           // ExceptionLogger.LogStorageException(new Exception(error.Msg, this), principal);
//        //            break;
//        //        case ErrorLocation.Client:
//        //          //  ExceptionLogger.LogClientError(new Exception(error.Msg, this), (principal as ICustomPrincipal), null);
//        //            break;
//        //        default:
//        //          //  ExceptionLogger.LogException(new Exception(error.Msg, this));
//        //            break;
//        //    }


//        //}
//    }
//}